package x.x.x;

import java.util.HashMap;
import java.util.Map;

public class EntrySlowerGetKnownKey {

    /**
     * 测试目的:遍历一个Map取值和取出Map的所有值那个更快
     * ==>答:遍历一个Map.Entry的时间要慢于直接get(Key)
     *@author hanxy17
     * 如修改方法体请自行修改作者信息
     * 当前作者只对自己编写内容负责
     *
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<Integer,String> map = new HashMap<Integer, String>();
        map.put(1, "a");
        map.put(2, "b");
        map.put(3, "c");
        map.put(4, "d");
        map.put(5, "e");
        map.put(6, "f");
        map.put(7, "g");
        map.put(8, "h");
        map.put(9, "i");
        
        long t1 = System.currentTimeMillis();
        /*
         * 方案一:遍历Map.Entry,通过entry获得key和value
         */
        for(int t = 0 ; t < 1000 ; t++){
            for(Map.Entry<Integer, String> entry:map.entrySet()){//更慢
                System.err.println(entry.getKey()+entry.getValue());
            }
        }
        
        long t2 =System.currentTimeMillis();
        /*
         * 方案二:已知Map的所有key值,遍历的同时依次取出
         */
        for(int t = 0 ; t < 1000 ; t++){
            for(int i = 0;i<9;i++){//更快
                System.err.println(i+map.get(i+1));
            } 
        }
        
        long t3 = System.currentTimeMillis();
        /*
         * 方案三:不用循环,直接把所有key对应的value取出
         */
        for(int t = 0 ; t < 1000 ; t++){//最快
            System.err.println(1+map.get(1));
            System.err.println(2+map.get(2));
            System.err.println(3+map.get(3));
            System.err.println(4+map.get(4));
            System.err.println(5+map.get(5));
            System.err.println(6+map.get(6));
            System.err.println(7+map.get(7));
            System.err.println(8+map.get(8));
            System.err.println(9+map.get(9));
        }
        long t4 = System.currentTimeMillis();
        System.err.println((t2-t1)+"ms"+"\n"+(t3-t2)+"ms"+"\n"+(t4-t3)+"ms");
        
        
        /*
         * 测试结果:方案一最慢,方案三大多数情况下会比方案二快;
         * 测试十几次会有方案三 >= 方案二的情况发生,可以认为方案三最快
         */
    }

}
